package com.mcp.converter.domain.parser;

import com.mcp.converter.shared.enums.SQLType;
import com.mcp.converter.shared.exception.SqlAnalysisException;
import com.mcp.converter.shared.response.sql.SQLParseResult;

/**
 * SQL解析器接口
 * 负责将SQL字符串解析为结构化的语法树
 * @author zengxiong
 */
public interface SQLParser {
    
    /**
     * 解析SQL语句
     * @param sql SQL语句
     * @return SQL解析结果
     * @throws SqlAnalysisException.SQLParseException 解析异常
     */
    SQLParseResult parse(String sql) throws SqlAnalysisException.SQLParseException;
    
    /**
     * 判断SQL语句类型
     * @param sql 输入的SQL语句
     * @return SQL语句类型
     * @throws SqlAnalysisException.SQLParseException 解析异常
     */
    SQLType getType(String sql) throws SqlAnalysisException.SQLParseException;
    
    /**
     * 后备解析：当正常解析失败时，尝试提取不兼容函数信息
     * @param sql SQL语句
     * @return SQL解析结果，如果完全无法解析则返回null
     */
    SQLParseResult parseWithFallback(String sql);
}
